home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 2 / CD ACTUAL VOL 2.iso / programa / tunplus / tun / tunsql.mst < prev    next >
Encoding:
Text File  |  1995-09-15  |  49.5 KB  |  1,518 lines

  1. '**************************************************************************
  2. '*
  3. '*                       Tun SQL 1.00 Setup Script
  4. '*    Copyright (c) 1995, Esker Corporation.   All rights reserved.
  5. '*
  6. '**************************************************************************
  7.  
  8. ''$DEFINE DEBUG  ''Define for script development/debugging
  9.  
  10. '$INCLUDE 'setupapi.inc'
  11. '$INCLUDE 'msdetect.inc'
  12.  
  13. GLOBAL WELCOMDLG$
  14. GLOBAL ASKCUSTOM$
  15. GLOBAL FINDINSTTYPE$
  16. GLOBAL ENCRYPTDLG$ 
  17. GLOBAL COPYFILES$ 
  18. GLOBAL ENCRYPTFILES$ 
  19. GLOBAL CREATEINIFILES$ 
  20. GLOBAL ADDPATH$
  21. GLOBAL ASKTCPCONF$
  22. GLOBAL RUNTCPCONF$
  23. GLOBAL CREATEGROUPS$ 
  24. GLOBAL szSN$
  25. GLOBAL szAK$
  26. GLOBAL szLS$
  27. GLOBAL DEST$    
  28.  
  29. '$INCLUDE 'setup.inc'
  30.  
  31. ''-- Dialog ID's ----------------------------------------------------------
  32. CONST WELCOME      = 100
  33. CONST ASKQUIT      = 200
  34. CONST DESTPATH     = 300
  35. CONST EXITFAILURE  = 400
  36. CONST EXITQUIT     = 600
  37. CONST EXITSUCCESS  = 700
  38. CONST OPTIONS      = 800
  39. CONST APPHELP      = 900
  40. CONST DIREXIST     = 1000
  41. CONST CUSTINST     = 6200
  42. CONST TOOBIG       = 6300
  43. CONST BADPATH      = 6400
  44. CONST CDGETNAMEORG = 7500
  45. CONST CDBADORG       = 7800
  46. CONST MODELESS       = 5000
  47. CONST MODELESS2       = 5001
  48. CONST ASKUPDATE       = 5003
  49. CONST ASKYESNOBACK = 5004
  50. CONST ASKYESNO       = 5005
  51. CONST CDBADFILE       = 7200
  52. CONST GETSERIALNUM = 1100
  53. CONST ODBCINSTALL  = 8100
  54. CONST ODBCBAD      = 8200
  55. CONST ODBCNODM     = 8300
  56. CONST ODBCBACK     = 8400
  57. CONST ASKDEMO      = 8500
  58.  
  59. ''-- Bitmap ID's ----------------------------------------------------------
  60. CONST LOGO         = 1
  61.  
  62. ''-- Files Types ----------------------------------------------------------
  63. CONST APPFILES     = 1
  64. CONST OPTFILES1    = 2
  65. CONST OPTFILES2    = 3
  66. CONST OPTFILES3    = 4
  67. CONST OPTFILES4    = 5
  68. CONST CRYPTFILES   = 100
  69. CONST CTL3DFILES   = 101
  70. CONST CONVERTFILES = 102
  71.  
  72.  
  73. ''-- Global variables -----------------------------------------------------
  74. GLOBAL DESTSQL$        ''Default destination directory.
  75. GLOBAL DESTKER$        ''Default destination directory.
  76. GLOBAL DESTCOM$        ''Default destination directory.
  77. GLOBAL SETUPPROG$   ''Full Path of DLL to be load.
  78. GLOBAL FILEPATH$    ''Temp File Path.
  79. GLOBAL WINDRIVE$    ''Windows drive letter.
  80. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  81. GLOBAL OPT2OPT$     ''Option selection from OptFiles2 option dialog.
  82. GLOBAL OPT3OPT$     ''Option selection from OptFiles1 option dialog.
  83. GLOBAL OPT4OPT$     ''Option selection from OptFiles2 option dialog.
  84.  
  85. ''-- CustInst list symbol names -------------------------------------------
  86. GLOBAL APPNEEDS$    ''Option list costs per drive
  87. GLOBAL OPT1NEEDS$
  88. GLOBAL OPT2NEEDS$
  89. GLOBAL OPT3NEEDS$
  90. GLOBAL OPT4NEEDS$
  91. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  92. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  93.  
  94. ''-- Dialog list symbol names ---------------------------------------------
  95. GLOBAL CHECKSTATES$
  96. GLOBAL STATUSTEXT$
  97. GLOBAL DRIVETEXT$
  98.  
  99. GLOBAL DiskFileVersion$ 
  100. GLOBAL MasterFileVersion$ 
  101. GLOBAL TCPCONF$ 
  102. GLOBAL INSTALLEDKER%
  103. GLOBAL INSTALLKER%
  104. GLOBAL INSTALLEDSQL%
  105. GLOBAL INSTALLSQL%
  106. GLOBAL INSTALLCRYPT%
  107. GLOBAL INSTALLCTL3D%
  108. GLOBAL INSTALLCONVERT%
  109. GLOBAL FINDTUNPATH%
  110.  
  111. ''-- Subroutine and function prototypes -----------------------------------
  112. DECLARE SUB RegisterCtl3d LIB "tunsql.dll" 
  113. DECLARE SUB UnregisterCtl3d LIB "tunsql.dll"
  114. DECLARE SUB OutputDebug LIB "tuncomm.dll" (szStr$)
  115. DECLARE SUB ShowMaximize LIB "tuncomm.dll" (hWnd%)
  116. DECLARE SUB AddOptFilesToCopyList (ftype%)
  117. DECLARE SUB RecalcOptFiles (ftype%)
  118. DECLARE SUB RecalcPath
  119. DECLARE SUB SetDriveStatus
  120. DECLARE FUNCTION CheckConfig LIB "tuncomm.dll" (szOld$, szNew$) AS INTEGER
  121. ''DECLARE FUNCTION EncryptFile LIB "tuncomm.dll" (szPath$, szSer$, szKey$, szLi$) AS INTEGER
  122. DECLARE FUNCTION CheckDriverManager LIB "tuncomm.dll" (szWinDir$, szWinSysDir$) AS INTEGER
  123. DECLARE FUNCTION InstallODBC LIB "tuncomm.dll" (hWnd%, szInstDir$, szOpt$) AS INTEGER
  124. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  125. DECLARE FUNCTION EncryptFile LIB "tuncomm.dll" (szPath$, szSer$, szKey$, szLi$) AS INTEGER
  126. DECLARE FUNCTION AddLangMenu LIB "tuncomm.dll" (szPath$) AS INTEGER
  127. DECLARE FUNCTION CreatIniConvert LIB "tuncomm.dll" (szPath$) AS INTEGER
  128. DECLARE FUNCTION CreatIniKer LIB "tuncomm.dll" (Path$,InstTcp%) AS INTEGER
  129. DECLARE FUNCTION CreatIniSql LIB "tuncomm.dll" (Path$) AS INTEGER
  130. DECLARE FUNCTION MyExitWindows LIB "tuncomm.dll" (nType%) AS INTEGER
  131.  
  132.      
  133. DECLARE FUNCTION IsInstalled (szSection$,szKey$,szFile$,szPath$) AS INTEGER
  134. DECLARE FUNCTION MakeString (i%) AS STRING
  135. DECLARE FUNCTION MakeDrive (i%) AS STRING
  136. DECLARE FUNCTION LookupApp (szAppName$) AS STRING
  137.  
  138. DECLARE FUNCTION CustomSetup LIB "tunsql.dll" (frame%,szDir$)
  139. DECLARE FUNCTION AddTunDir LIB "tunsql.dll" (szDir$) AS INTEGER
  140. DECLARE FUNCTION FindExistingPath LIB "tunsql.dll" (szDir$) AS INTEGER
  141. DECLARE FUNCTION IsNewer (szVersion1$, szVersion2$) AS INTEGER
  142.  
  143.  
  144.  
  145. ''-------------------------------------------------------------------------
  146. '' INIT
  147. ''   Program entry point
  148. ''   Set up variables and initial appearence. Load .INF file.
  149. ''-------------------------------------------------------------------------
  150. INIT:
  151.     CUIDLL$ = "TUNSQL.dll"            ''custom user interface dll
  152.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  153.  
  154.  
  155.     '' ---- Set up main window appearence    ----
  156.     '' ---- Display TUN SQL Setup bitmap and ----
  157.     '' ---- set main window title            ----
  158.  
  159.     hWnd% = HwndFrame()
  160.     ShowMaximize hWnd%
  161.     SetBitmap CUIDLL$, LOGO
  162.     SetTitle "Tun SQL - Installation"
  163.  
  164.     '' ---- Read TUNSQL.INF ----
  165.  
  166.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  167.     IF szInf$ = "" THEN
  168.         szInf$ = GetSymbolValue("STF_CWDDIR") + "TUNSQL.INF"
  169.     END IF
  170.     ReadInfFile szInf$
  171.  
  172.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  173.     IF DEST$ = "" THEN
  174.       DEST$ = WINDRIVE$ + ":\TUN"
  175.     ENDIF
  176.  
  177.     '' ---- CustInst list symbols ----
  178.     CHECKSTATES$ = "CheckItemsState"
  179.     STATUSTEXT$  = "StatusItemsText"
  180.     DRIVETEXT$   = "DriveStatusText"
  181.     FOR i% = 1 TO 6 STEP 1
  182.         AddListItem CHECKSTATES$, "OFF"
  183.     NEXT i%
  184.     FOR i% = 1 TO 6 STEP 1
  185.         AddListItem STATUSTEXT$, ""
  186.     NEXT i%
  187.     FOR i% = 1 TO 7 STEP 1
  188.         AddListItem DRIVETEXT$, ""
  189.     NEXT i%
  190.     ReplaceListItem DRIVETEXT$, 7, DEST$
  191.  
  192.     '' ---- Disk cost list symbols ----
  193.     APPNEEDS$   = "AppNeeds"
  194.     OPT1NEEDS$  = "Opt1Needs"
  195.     OPT2NEEDS$  = "Opt2Needs"
  196.     OPT3NEEDS$  = "Opt3Needs"
  197.     OPT4NEEDS$  = "Opt4Needs"
  198.     EXTRACOSTS$ = "ExtraCosts"
  199.     BIGLIST$    = "BigList"
  200.     FOR i% = 1 TO 6 STEP 1
  201.         AddListItem BIGLIST$, ""
  202.     NEXT i%
  203.     FOR i% = 1 TO 26 STEP 1
  204.         AddListItem EXTRACOSTS$, "0"
  205.         AddListItem OPT1NEEDS$, "0"
  206.         AddListItem OPT2NEEDS$, "0"
  207.         AddListItem OPT3NEEDS$, "0"
  208.         AddListItem OPT4NEEDS$, "0"
  209.     NEXT i%
  210.  
  211.     '' ---- File Option Variables ----
  212.     OPT1OPT$ = "1"
  213.     OPT2OPT$ = "1"
  214.     OPT3OPT$ = "1"
  215.     OPT4OPT$ = "1"
  216.  
  217.     INSTALLEDKER% = 0 
  218.     
  219.     RecalcPath
  220.     SetDriveStatus
  221.  
  222. '$IFDEF DEBUG
  223.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  224. '$ENDIF ''DEBUG
  225.  
  226.     RegisterCtl3d
  227.  
  228.  
  229. ''-------------------------------------------------------------------------
  230. '' WELCOME
  231. ''   Display the welcome setup dialog
  232. ''-------------------------------------------------------------------------
  233. IF WELCOMDLG$ <> "NO" THEN
  234. WELCOME:
  235.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "" )
  236.     IF sz$ = "EXIT" THEN
  237.     GOSUB ASKQUIT
  238.     GOTO WELCOME
  239.     ELSEIF sz$ = "REACTIVATE" THEN
  240.     GOTO WELCOME
  241.     ENDIF
  242.     UIPop 1
  243. ENDIF
  244.  
  245.  
  246. ''-------------------------------------------------------------------------
  247. '' CUSTINST
  248. ''   Display the custom setup dialog
  249. ''-------------------------------------------------------------------------
  250. IF ASKCUSTOM$ <> "NO" THEN
  251. CUSTINST:
  252.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  253.  
  254.     IF sz$ = "CONTINUE" THEN
  255.         ''Install only if it will fit.
  256.         FOR i% = 1 TO 6 STEP 1
  257.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  258.                 GOSUB TOOBIG
  259.                 GOTO CUSTINST
  260.             END IF
  261.         NEXT i%
  262.         IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
  263.                 opt1$ = "DRIVERMANAGER"
  264.         ELSE
  265.                 opt1$ = "NONE"
  266.         END IF
  267.         IF GetListItem(CHECKSTATES$, OPTFILES2) = "ON" THEN
  268.                 opt2$ = "SAMPLES"
  269.         ELSE
  270.                 opt2$ = "NONE"
  271.         END IF
  272.     GOTO CHECKDMVERSION
  273.         '' UIPop 1
  274.         '' GOTO INSTALL
  275.     ELSEIF sz$ = "PATH" THEN
  276.         GOTO GETPATH
  277.     ELSEIF sz$ = "CHK2" THEN
  278.         RecalcOptFiles OPTFILES1
  279.         SetDriveStatus
  280.         GOTO CUSTINST
  281.     ELSEIF sz$ = "CHK3" THEN
  282.         RecalcOptFiles OPTFILES2
  283.         SetDriveStatus
  284.         GOTO CUSTINST
  285.     ELSEIF sz$ = "CHK4" THEN
  286.         RecalcOptFiles OPTFILES3
  287.     IF INSTALLEDKER% <> 1 THEN
  288.       RecalcOptFiles OPTFILES4
  289.     ENDIF
  290.         SetDriveStatus
  291.         GOTO CUSTINST
  292.     ELSEIF sz$ = "REACTIVATE" THEN
  293.         RecalcPath
  294.         SetDriveStatus
  295.         GOTO CUSTINST
  296.     ELSE
  297.         GOSUB ASKQUIT
  298.         GOTO CUSTINST
  299.     END IF
  300. ENDIF
  301.  
  302.  
  303.  
  304. ''-------------------------------------------------------------------------
  305. '' INSTALL
  306. ''   Start the installation
  307. ''-------------------------------------------------------------------------
  308. INSTALL:
  309. ''    DESTSQL$ = MakePath( DEST$ , "SQL")
  310. ''    ClearCopyList
  311. ''    AddOptFilesToCopyList APPFILES
  312. ''    AddOptFilesToCopyList OPTFILES1
  313. ''    AddOptFilesToCopyList OPTFILES2
  314. ''    IF DoesDirExist( DEST$ ) = 1 THEN
  315. ''        SetSymbolValue "EditTextIn", DEST$
  316. ''        sz$ = UIStartDlg(CUIDLL$, DIREXIST, "FEditDlgProc", APPHELP, HELPPROC$)
  317.  
  318. ''       UIPop 1
  319.     
  320. ''        IF sz$ = "BACK" THEN
  321. ''        GOTO CUSTINST
  322. ''    ELSEIF sz$ = "EXIT" THEN
  323. ''           GOSUB ASKQUIT
  324. ''          GOTO INSTALL
  325. ''     ELSEIF sz$ <> "CONTINUE" THEN
  326. ''            GOTO INSTALL
  327. ''        END IF
  328. ''    END IF
  329.  
  330. ''
  331. ''      Init path sub-directory
  332. ''
  333.  
  334.     DESTKER$= MakePath( DEST$, "KERNELW")
  335.     DESTSQL$= MakePath( DEST$, "SQL")
  336.     DESTCOM$= MakePath( DEST$, "COMMON")
  337.  
  338. ''
  339. ''      Find type of installation
  340. ''
  341. IF GetListItem(CHECKSTATES$, OPTFILES3) = "ON" THEN
  342.   INSTALLKER% = 1
  343.   IF FINDINSTTYPE$ <> "NO" THEN
  344.  
  345.     FILEPATH$= MakePath( DESTKER$, "TUNTCPIP.DLL")
  346.     IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  347.       MasterFileVersion$ = GetSectionKeyVersion("KernelFiles","TUNTCPIP.DLL")
  348.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  349.       INSTALLEDKER% = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  350.     ENDIF
  351.  
  352.     IF INSTALLEDKER% = 1 THEN
  353.       SetSymbolValue "TitleYesNoBack", "Update"
  354.       SetSymbolValue "MessageYesNoBack", "The same version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  355. INSK1:
  356.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  357.       UIPop 1
  358.       IF sz$ = "YES" THEN
  359.     INSTALLKER% = 1 
  360.       ELSEIF sz$ = "BACK" THEN
  361.     GOTO CUSTINST 
  362.       ELSEIF sz$ = "REACTIVATE" THEN
  363.         GOTO INSK1
  364.       ELSE
  365.     INSTALLKER% = 0
  366.       ENDIF
  367.     ELSEIF INSTALLEDKER% = 2 THEN
  368.       SetSymbolValue "TitleYesNoBack", "Update"
  369.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  370. INSK2:
  371.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  372.       UIPop 1
  373.       IF sz$ = "YES" THEN
  374.     INSTALLKER% = 2 
  375.       ELSEIF sz$ = "BACK" THEN
  376.     GOTO CUSTINST 
  377.       ELSEIF sz$ = "REACTIVATE" THEN
  378.         GOTO INSK2
  379.       ELSE
  380.     INSTALLKER% = 0
  381.       ENDIF
  382.     ELSE
  383.       INSTALLKER% = 1
  384.     ENDIF
  385.   ENDIF
  386. ELSE
  387.   INSTALLKER% = 0
  388. ENDIF
  389.  
  390. INSTALLEDSQL% = 0
  391. INSTALLSQL% = 1
  392. INSTALLCRYPT% = 1
  393. INSTALLCTL3D% = 1
  394. INSTALLCONVERT% = 1
  395. IF FINDINSTTYPE$ <> "NO" THEN
  396.  
  397. FILEPATH$= MakePath( DESTSQL$, "DRIVER\TUNODBC.DLL")
  398.   IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  399.     MasterFileVersion$ = GetSectionKeyVersion("SqlFiles","TUNODBC.DLL")
  400.     DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  401.     INSTALLEDSQL% = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  402.   ENDIF
  403.  
  404.   IF INSTALLEDSQL% = 1 THEN
  405.     SetSymbolValue "TitleYesNoBack", "Update"
  406.     SetSymbolValue "MessageYesNoBack", "The same version of Tun SQL has been found. Do you want to overwrite it ?" 
  407. INSS1:
  408.     sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  409.     UIPop 1
  410.     IF sz$ = "YES" THEN
  411.       INSTALLSQL% = 1 
  412.     ELSEIF sz$ = "BACK" THEN
  413.       GOTO CUSTINST 
  414.     ELSEIF sz$ = "REACTIVATE" THEN
  415.       GOTO INSS1
  416.     ELSE
  417.       INSTALLSQL% = 0
  418.     ENDIF
  419.   ELSEIF INSTALLEDSQL% = 2 THEN
  420.     SetSymbolValue "TitleYesNoBack", "Update"
  421.     SetSymbolValue "MessageYesNoBack", "A previous version of Tun SQL has been found. Do you want to overwrite it ?" 
  422. INSS2:
  423.     sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  424.     UIPop 1
  425.     IF sz$ = "YES" THEN
  426.       INSTALLSQL% = 2 
  427.     ELSEIF sz$ = "BACK" THEN
  428.       GOTO CUSTINST 
  429.     ELSEIF sz$ = "REACTIVATE" THEN
  430.       GOTO INSS2
  431.     ELSE
  432.       INSTALLSQL% = 0
  433.     ENDIF
  434.   ELSE
  435.     INSTALLSQL% = 1
  436.   ENDIF
  437.  
  438. '' Tuncrypt ?
  439.   fInst% = IsInstalled ("CryptFiles","TUNCRYPT.DLL","TUNCRYPT.DLL",DESTCOM$)
  440.   IF fInst% <> 2 AND fInst% <> 4 THEN 
  441.      INSTALLCRYPT%=0
  442.   ENDIF
  443.  
  444. '' Convert ?
  445.   fInst% = IsInstalled ("ConvertFiles","CONVERT.DLL","CONVERT.DLL",DESTCOM$)
  446.   IF fInst% <> 2 AND fInst% <> 4 THEN 
  447.      INSTALLCONVERT%=0
  448.   ENDIF
  449.  
  450. '' CTL3D ?
  451.   fInst% = IsInstalled ("Ctl3dFiles","CTL3D.TUN","CTL3D.DLL",GetWindowsSysDir)
  452.   IF fInst% = 0 OR fInst% = 1 THEN 
  453.      INSTALLCTL3D%=0
  454.   ELSEIF fInst% = 2 THEN
  455.      INSTALLCTL3D%=2
  456.   ENDIF
  457.  
  458. ENDIF
  459. IF INSTALLSQL% = 0 AND INSTALLKER%= 0 THEN
  460.   GOTO CUSTINST
  461. ENDIF
  462.  
  463. ''-------------------------------------------------------------------------
  464. '' SERIAL
  465. ''   Ask for serial number and activation key
  466. ''-------------------------------------------------------------------------
  467. IF ENCRYPTDLG$ <> "NO" THEN
  468. SERIAL:
  469.     sz$ = UIStartDlg(CUIDLL$, GETSERIALNUM, "FNameOrgDlgProc", APPHELP, HELPPROC$)
  470.     IF sz$ = "CANCEL" THEN
  471.       sz$ = UIStartDlg(CUIDLL$, CDBADORG, "FInfoDlgProc", 0, "" )
  472.       UIPop 1
  473.       GOTO SERIAL
  474.     ELSEIF sz$ = "EXIT" THEN
  475.       GOSUB ASKQUIT
  476.       GOTO SERIAL
  477.     ELSEIF sz$ <> "CONTINUE" THEN
  478.       GOTO SERIAL
  479.     ENDIF
  480.        
  481.     szSN$ = GetSymbolValue( "NameOut" )
  482.     szAK$ = GetSymbolValue( "OrgOut" )
  483.     szLS$ = GetSymBolValue( "LicenseStringOut" )
  484.     szHEAD$ = MID$( szSN$, 4, 2 )
  485.     IF szHEAD$ <> "04" AND szHEAD$ <> "02" THEN
  486. BADF1:
  487.       sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "" )
  488.       UIPop 1
  489.       IF sz$ = "EXIT" THEN
  490.           GOTO ASKQUIT
  491.           GOTO SERIAL
  492.           ELSEIF sz$ = "CONTINUE" THEN
  493.           GOTO SERIAL
  494.           ELSE
  495.               GOTO BADF1
  496.       ENDIF
  497.     ENDIF
  498.     UIPop 1
  499. ENDIF
  500.  
  501.  
  502. ''-------------------------------------------------------------------------
  503. '' COPYFILES
  504. ''   Create directory and copy files
  505. ''-------------------------------------------------------------------------
  506. IF COPYFILES$ <> "NO" THEN
  507.     ClearCopyList
  508.     AddOptFilesToCopyList APPFILES
  509.     AddOptFilesToCopyList OPTFILES1
  510.     AddOptFilesToCopyList OPTFILES2
  511.     IF INSTALLKER% <> 0 THEN
  512.       AddOptFilesToCopyList OPTFILES3
  513.       IF INSTALLKER% = 1 THEN
  514.     AddOptFilesToCopyList OPTFILES4
  515.       ENDIF
  516.     ENDIF
  517.     IF INSTALLCRYPT% = 1 THEN
  518.       AddOptFilesToCopyList CRYPTFILES
  519.     ENDIF
  520.     IF INSTALLCONVERT% = 1 THEN
  521.       AddOptFilesToCopyList CONVERTFILES
  522.     ENDIF
  523.     IF INSTALLCTL3D% <> 0 THEN
  524.       AddOptFilesToCopyList CTL3DFILES
  525.     ENDIF
  526.     CreateDir DEST$, cmoNone
  527.     SetRestartDir MakePath( DEST$, "TMP")
  528.     CopyFilesInCopyList
  529.  
  530. ENDIF
  531. ''COPYFILES:
  532. ''    CreateDir DEST$, cmoNone
  533. ''    CopyFilesInCopyList
  534.  
  535.  
  536. ''-------------------------------------------------------------------------
  537. '' ENCRYPT
  538. ''   Encrypt executables and DLL
  539. ''-------------------------------------------------------------------------
  540. IF ENCRYPTFILES$ <> "NO" THEN
  541.  
  542. ''    SetSymbolValue "NameOut", szSN$
  543. ''    SetSymbolValue "OrgOut", szAK$
  544. ''    SetSymBolValue "LicenseStringOut", szLS$
  545. ''IF INSTALLKER% <> 0 THEN
  546. ''    SetSymbolValue "PathFiles", DESTKER$
  547. ''    SetSymbolValue "ProgramType", "KER" 
  548. ''    sz$ = UIStartDlg(CUIDLL$, MODELESS, "FModelessDlgProc", 0, "" )
  549. ''    UIPop 1
  550. ''ENDIF
  551.  
  552. ENCRYPT:
  553.     curs% = ShowWaitCursor()
  554. ''    szFileToEncrypt$ = MakePath( DESTSQL$, "BIN\DBSHOW.EXE" )
  555. ''    fEncrypt% = EncryptFile( szFileToEncrypt$, szSN$, szAK$, szLS$ )
  556. ''    szFileToEncrypt$ = MakePath( DESTSQL$, "BIN\TUNODBC.DLL" )
  557. ''    fEncrypt% = EncryptFile( szFileToEncrypt$, szSN$, szAK$, szLS$ )
  558. ''    szFileToEncrypt$ = MakePath( DESTSQL$, "BIN\DBSCRIPT.EXE" )
  559. ''    fEncrypt% = EncryptFile( szFileToEncrypt$, szSN$, szAK$, szLS$ )
  560. ''    szFileToEncrypt$ = MakePath( DESTSQL$, "BIN\DBMAP.EXE" )
  561. ''    fEncrypt% = EncryptFile( szFileToEncrypt$, szSN$, szAK$, szLS$ )
  562.  
  563.     fEncryt%=EncryptFile(DESTCOM$, szSN$, szAK$, szLS$)
  564.  
  565.     RestoreCursor curs%
  566.  
  567. ENDIF
  568.  
  569. ''-------------------------------------------------------------------------
  570. '' CTL3D
  571. ''   Check and Install CTL3D.DLL if required
  572. ''-------------------------------------------------------------------------
  573. CTL3D:
  574.    szNF$ = MakePath(DESTCOM$ , "CTL3D.TUN")
  575.    szOF$ = GetWindowsSysDir() + "CTL3D.DLL"
  576.    IF INSTALLCTL3D% = 2 THEN 
  577. CTL3D1:
  578.      sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  579.      IF sz$ = "YES" THEN
  580.        CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  581.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  582.      ELSEIF sz$ = "REACTIVATE" THEN
  583.         GOTO CTL3D1
  584.      ENDIF
  585.      UIPop 1
  586.    ELSEIF INSTALLCTL3D% = 1 THEN
  587.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  588.    ENDIF
  589.  
  590.  
  591. ''-------------------------------------------------------------------------
  592. '' ASKDEMO
  593. ''   Ask the user for wich RDBMS he want to install DEMOS
  594. ''-------------------------------------------------------------------------
  595. ASKDEMO:
  596.     IF opt2$ = "SAMPLES" THEN
  597.     sz$ = UIStartDlg(CUIDLL$, ASKDEMO, "FAskDemoDlgProc", 0, "")
  598.     IF sz$ = "CONTINUE" OR sz$ = "CANCEL" THEN
  599.         szDemoIfx$ = GetSymbolValue( "IfxCheckbox" )
  600.         szDemoOra$ = GetSymbolValue( "OraCheckbox" )
  601.         szDemoSyb$ = GetSymbolValue( "SybCheckbox" )
  602.         szDemoIse$ = GetSymbolValue( "IseCheckbox" )
  603.         UIPop 1
  604.     ELSEIF sz$ = "EXIT" THEN
  605.             GOSUB ASKQUIT
  606.             GOTO ASKDEMO
  607.     ELSEIF sz$ = "REACTIVATE" THEN
  608.             GOTO ASKDEMO
  609.     ENDIF
  610.     ENDIF
  611.  
  612.  
  613. ''-------------------------------------------------------------------------
  614. '' SAVEDM
  615. ''   Save all driver manager components if required
  616. ''-------------------------------------------------------------------------
  617. SAVEDM:
  618.     IF fSaveDM% = 1 THEN
  619.     curs% = ShowWaitCursor()
  620.     CreateDir MakePath(DESTSQL$, "ODBC.OLD"), cmoNone
  621.     szSrc$ = GetWindowsSysDir() + "ODBC.DLL"
  622.     IF DoesFileExist(szSrc$, femRead) THEN
  623.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBC.DLL")
  624.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  625.     ENDIF
  626.     szSrc$ = GetWindowsSysDir() + "ODBCINST.DLL"
  627.     IF DoesFileExist(szSrc$, femRead) THEN
  628.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.DLL")
  629.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  630.     ENDIF
  631.     szSrc$ = GetWindowsSysDir() + "ODBCCURS.DLL"
  632.     IF DoesFileExist(szSrc$, femRead) THEN
  633.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.DLL")
  634.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  635.     ENDIF
  636.     szSrc$ = GetWindowsSysDir() + "ODBCINST.HLP"
  637.     IF DoesFileExist(szSrc$, femRead) THEN
  638.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.HLP")
  639.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  640.     ENDIF
  641.     szSrc$ = GetWindowsDir() + "ODBCADM.EXE"
  642.     IF DoesFileExist(szSrc$, femRead) THEN
  643.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCADM.EXE")
  644.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  645.     ENDIF
  646.     szSrc$ = GetWindowsDir() + "ODBCINST.INI"
  647.     IF DoesFileExist(szSrc$, femRead) THEN
  648.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.INI")
  649.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  650.     ENDIF
  651.     szSrc$ = GetWindowsDir() + "ODBC.INI"
  652.     IF DoesFileExist(szSrc$, femRead) THEN
  653.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBC.INI")
  654.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  655.     ENDIF
  656.     RestoreCursor curs%
  657.     ENDIF
  658.  
  659.  
  660. ''-------------------------------------------------------------------------
  661. '' INSTALLODBCDRIVER
  662. ''   Install ODBC driver
  663. ''-------------------------------------------------------------------------
  664. INSTALLODBCDRIVER:
  665.     IF opt1$ = "DRIVERMANAGER" THEN
  666.         CopyFile MakePath( DESTSQL$, "BIN\TUNODBC.DLL"), MakePath( DESTSQL$, "DRIVER\TUNODBC.DLL"), cmoOverwrite, 0 
  667.         CopyFile MakePath( DESTSQL$, "BIN\TUNTRANS.DLL"), MakePath( DESTSQL$, "DRIVER\TUNTRANS.DLL"), cmoOverwrite, 0 
  668.         CopyFile MakePath( DESTSQL$, "BIN\TUNCS.DLL"), MakePath( DESTSQL$, "DRIVER\TUNCS.DLL"), cmoOverwrite, 0 
  669.         CopyFile MakePath( DESTSQL$, "BIN\TUNCSTIM.EXE"), MakePath( DESTSQL$, "DRIVER\TUNCSTIM.EXE"), cmoOverwrite, 0 
  670. INSTALLODBC:
  671.     hWnd% = HwndFrame()
  672.     nRc% = InstallODBC(hWnd%, DESTSQL$, opt1$)
  673.     IF nRc% = 0 THEN
  674.             GOSUB ASKQUIT
  675.             GOTO INSTALLODBC
  676.     END IF
  677.     ELSE
  678.     curs% = ShowWaitCursor()
  679.     '' ---- Copy files ----
  680.         CopyFile MakePath( DESTSQL$, "BIN\TUNODBC.DLL"), MakePath( GetWindowsSysDir(), "TUNODBC.DLL"), cmoOverwrite, 0 
  681.         CopyFile MakePath( DESTSQL$, "BIN\TUNTRANS.DLL"), MakePath( GetWindowsSysDir(), "TUNTRANS.DLL"), cmoOverwrite, 0 
  682.         CopyFile MakePath( DESTSQL$, "BIN\TUNCS.DLL"), MakePath( GetWindowsSysDir(), "TUNCS.DLL"), cmoOverwrite, 0 
  683.         CopyFile MakePath( DESTSQL$, "BIN\TUNCSTIM.EXE"), MakePath( GetWindowsSysDir(), "TUNCSTIM.EXE"), cmoOverwrite, 0 
  684.  
  685.     '' ---- Update ODBCINST.INI for Tun Driver ----
  686.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "ODBC Drivers", "Tun Driver", "Installed" ,cmoOverwrite
  687.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Driver", "Driver", MakePath( GetWindowsSysDir(), "TUNODBC.DLL" ), cmoOverwrite
  688.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Driver", "Setup", MakePath( GetWindowsSysDir(), "TUNODBC.DLL" ), cmoOverwrite
  689.  
  690.     '' ---- Update ODBCINST.INI for Tun Translator ----
  691.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "ODBC Translators", "Tun Translator", "Installed" ,cmoOverwrite
  692.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Translator", "Translator", MakePath( GetWindowsSysDir(), "TUNTRANS.DLL" ), cmoOverwrite
  693.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Translator", "Setup", MakePath( GetWindowsSysDir(), "TUNTRANS.DLL" ), cmoOverwrite
  694.     RestoreCursor curs%
  695.     END IF
  696.  
  697. ''-------------------------------------------------------------------------
  698. '' UPDATEINIFILES
  699. ''   Create or update entries in .INI files
  700. ''-------------------------------------------------------------------------
  701. IF CREATEINIFILES$ <> "NO" THEN
  702.  
  703. UPDATEINIFILES:
  704.  
  705.    CursorSave% = ShowWaitCursor()
  706.     '' ---- Create / Update entries in TUN.INI ----
  707.  
  708.     szLG$ = MID$( szSN$, 3, 1 )
  709.     nLG% = (ASC(MID$(szSN$,6,1)) - ASC("0")) * 10 + (ASC(MID$(szSN$,7,1)) - ASC("0"))
  710.     IF DoesIniKeyExist( MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language") = 0 THEN
  711.     IF nLG% = 1 THEN
  712.         szLGN$= "01"
  713.     ELSEIF nLG% > 3 THEN
  714.         szLGN$ = MakeString(nLG% - 2 ) 
  715.     ELSE
  716.         szLGN$ ="00"
  717.     END IF
  718.         CreateIniKeyValue MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language", szLGN$ ,cmoOverwrite
  719.     END IF
  720.  
  721.   i%=AddLangMenu(DESTCOM$)
  722.  
  723. IF INSTALLCONVERT% = 1 THEN
  724.   i%=CreatIniConvert(DESTCOM$)
  725. ENDIF
  726.  
  727. IF INSTALLKER% <> 0 THEN
  728.  i%= CreatIniKer(DESTKER$,0)
  729. ENDIF
  730.  
  731. i%= CreatIniSql(DESTSQL$)
  732.  
  733.     RestoreCursor CursorSave%
  734. ENDIF
  735.  
  736. ''
  737. ''      Add Path of Tun KERNEL in AUTOEXEC.BAT
  738. ''
  739. FINDTUNPATH%=1
  740. IF ADDPATH$ <> "NO" THEN
  741.  
  742. IF INSTALLKER% <> 0 THEN
  743.   FINDTUNPATH% = FindExistingPath(DESTKER$)
  744.   IF FINDTUNPATH% = 0 THEN
  745.     i% = AddTunDir(DESTKER$)
  746.   ENDIF
  747. ENDIF
  748. ENDIF
  749.  
  750. ''
  751. ''     Ask to configure TCP/IP 
  752. ''
  753. TCPCONF$ = "NO"
  754.  
  755. IF ASKTCPCONF$ <> "NO" THEN
  756.  
  757. IF INSTALLKER% <> 0 THEN
  758.     SetSymbolValue "MessageYesNo", "Do you want to configure TCP/IP now ? This can be done later running the Administrator"
  759.     SetSymbolValue "TitleYesNo", "TCP/IP Configuration"
  760. TCPCONF1:
  761.     TCPCONF$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "" )
  762.     IF TCPCONF$ = "REACTIVATE" THEN
  763.         GOTO TCPCONF1
  764.     ENDIF
  765.     UIPop 1
  766. ENDIF
  767.  
  768. ENDIF
  769.  
  770. IF CREATEGROUPS$ <> "NO" THEN
  771.  
  772. ''-------------------------------------------------------------------------
  773. ''   TUN KERNEL Program group and program items creation     
  774. ''-------------------------------------------------------------------------
  775. IF INSTALLKER% <> 0 THEN
  776.     CreateProgmanGroup "Tun KERNEL", "", cmoNone
  777.     ShowProgmanGroup  "Tun KERNEL", 1, cmoNone
  778.     CreateProgmanItem "Tun KERNEL", "Admin", MakePath( DESTKER$, "WTUNTCPW.EXE -NFS -NFSD -LPR -LPD -FTPD" ), "", cmoOverwrite
  779.     CreateProgmanItem "Tun KERNEL", "WTCPIP", MakePath( DESTKER$, "WTCPIP.EXE" ), "", cmoOverwrite
  780.     CreateProgmanItem "Tun KERNEL", "Ping", MakePath( DESTKER$, "WPING.EXE" ), "", cmoOverwrite
  781.  
  782. ENDIF
  783.  
  784. ''-------------------------------------------------------------------------
  785. '' CREATEAPPGROUP
  786. ''   TUN SQL Program group and program items creation     
  787. ''-------------------------------------------------------------------------
  788. CREATEAPPGROUP:
  789.     CreateProgmanGroup "Tun SQL", "", cmoNone
  790.     ShowProgmanGroup  "Tun SQL", 1, cmoNone
  791.     CreateProgmanItem "Tun SQL", "DB Show", MakePath( DESTSQL$, "BIN\DBSHOW.EXE" ), "", cmoOverwrite
  792.     CreateProgmanItem "Tun SQL", "DB Script", MakePath( DESTSQL$, "BIN\DBSCRIPT.EXE" ), "", cmoOverwrite
  793.     CreateProgmanItem "Tun SQL", "DB Map", MakePath( DESTSQL$, "BIN\DBMAP.EXE" ), "", cmoOverwrite
  794.  
  795. ''-------------------------------------------------------------------------
  796. '' CREATESAMPLESGROUP
  797. ''   TUN SQL Sample program items creation     
  798. ''-------------------------------------------------------------------------
  799. CREATESAMPLESGROUP:
  800.     IF opt2$ = "SAMPLES" THEN
  801.     '' ---- Word demo's ----
  802.     szIco$ = MakePath( DESTSQL$, "DEMO\WORD\ODBCWRD.ICO" )
  803.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\WORD" )
  804.     szPar$ = szIco$ + ",,,," + szWorkDir$
  805.     szExePath$ = LookupApp("WORD")
  806.     IF szDemoIfx$ = "YES" THEN
  807.         szCmd$ = szExePath$ + " IFXDEMO1.DOC"
  808.         CreateProgmanItem "TUN SQL", "MS Word Informix TABLE", szCmd$ , szPar$, cmoOverwrite
  809.         szCmd$ = szExePath$ + " IFXDEMO2.DOC"
  810.         CreateProgmanItem "TUN SQL", "MS Word Informix MAILING", szCmd$ , szPar$, cmoOverwrite
  811.         END IF
  812.     IF szDemoOra$ = "YES" THEN
  813.         szCmd$ = szExePath$ + " ORADEMO1.DOC"
  814.         CreateProgmanItem "TUN SQL", "MS Word Oracle TABLE", szCmd$ , szPar$, cmoOverwrite
  815.         szCmd$ = szExePath$ + " ORADEMO2.DOC"
  816.         CreateProgmanItem "TUN SQL", "MS Word Oracle MAILING", szCmd$ , szPar$, cmoOverwrite
  817.         END IF
  818.     IF szDemoSyb$ = "YES" THEN
  819.         szCmd$ = szExePath$ + " SYBDEMO1.DOC"
  820.         CreateProgmanItem "TUN SQL", "MS Word Sybase TABLE", szCmd$ , szPar$, cmoOverwrite
  821.         szCmd$ = szExePath$ + " SYBDEMO2.DOC"
  822.         CreateProgmanItem "TUN SQL", "MS Word Sybase MAILING", szCmd$ , szPar$, cmoOverwrite
  823.         END IF
  824.     IF szDemoIse$ = "YES" THEN
  825.         szCmd$ = szExePath$ + " ISEDEMO1.DOC"
  826.         CreateProgmanItem "TUN SQL", "MS Word Informix-SE TABLE", szCmd$ , szPar$, cmoOverwrite
  827.         szCmd$ = szExePath$ + " ISEDEMO2.DOC"
  828.         CreateProgmanItem "TUN SQL", "MS Word Informix-SE MAILING", szCmd$ , szPar$, cmoOverwrite
  829.         END IF
  830.  
  831.     '' ---- Excel demo's ----
  832.     szIco$ = MakePath( DESTSQL$, "DEMO\EXCEL\ODBCEXC.ICO" )
  833.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\EXCEL" )
  834.     szPar$ = szIco$ + ",,,," + szWorkDir$
  835.     szExePath$ = LookupApp("EXCEL")
  836.     IF szDemoIfx$ = "YES" THEN
  837.         szCmd$ = szExePath$ + " IFXDEMO1.XLS"
  838.         CreateProgmanItem "TUN SQL", "MS Excel Informix TABLE", szCmd$ , szPar$, cmoOverwrite
  839.         szCmd$ = szExePath$ + " IFXDEMO2.XLS"
  840.         CreateProgmanItem "TUN SQL", "MS Excel Informix X-TABLE", szCmd$ , szPar$, cmoOverwrite
  841.         szCmd$ = szExePath$ + " IFXDEMO3.XLS"
  842.         CreateProgmanItem "TUN SQL", "MS Excel Informix REQUEST", szCmd$ , szPar$, cmoOverwrite
  843.     END IF
  844.     IF szDemoOra$ = "YES" THEN
  845.         szCmd$ = szExePath$ + " ORADEMO1.XLS"
  846.         CreateProgmanItem "TUN SQL", "MS Excel Oracle TABLE", szCmd$ , szPar$, cmoOverwrite
  847.         szCmd$ = szExePath$ + " ORADEMO2.XLS"
  848.         CreateProgmanItem "TUN SQL", "MS Excel Oracle X-TABLE", szCmd$ , szPar$, cmoOverwrite
  849.         szCmd$ = szExePath$ + " ORADEMO3.XLS"
  850.         CreateProgmanItem "TUN SQL", "MS Excel Oracle REQUEST", szCmd$ , szPar$, cmoOverwrite
  851.     END IF
  852.     IF szDemoSyb$ = "YES" THEN
  853.         szCmd$ = szExePath$ + " SYBDEMO1.XLS"
  854.         CreateProgmanItem "TUN SQL", "MS Excel Sybase TABLE", szCmd$ , szPar$, cmoOverwrite
  855.         szCmd$ = szExePath$ + " SYBDEMO2.XLS"
  856.         CreateProgmanItem "TUN SQL", "MS Excel Sybase X-TABLE", szCmd$ , szPar$, cmoOverwrite
  857.         szCmd$ = szExePath$ + " SYBDEMO3.XLS"
  858.         CreateProgmanItem "TUN SQL", "MS Excel Sybase REQUEST", szCmd$ , szPar$, cmoOverwrite
  859.     END IF
  860.     IF szDemoIse$ = "YES" THEN
  861.         szCmd$ = szExePath$ + " ISEDEMO1.XLS"
  862.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE TABLE", szCmd$ , szPar$, cmoOverwrite
  863.         szCmd$ = szExePath$ + " ISEDEMO2.XLS"
  864.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE X-TABLE", szCmd$ , szPar$, cmoOverwrite
  865.         szCmd$ = szExePath$ + " ISEDEMO3.XLS"
  866.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE REQUEST", szCmd$ , szPar$, cmoOverwrite
  867.     END IF
  868.  
  869.     '' ---- Access demo's ----
  870.     szIco$ = MakePath( DESTSQL$, "DEMO\ACCESS\ODBCACC.ICO" )
  871.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\ACCESS" )
  872.     szPar$ = szIco$ + ",,,," + szWorkDir$
  873.     szExePath$ = LookupApp("ACCESS")
  874.     IF szDemoIfx$ = "YES" THEN
  875.         szCmd$ = szExePath$ + " IFXDEMO.MDB"
  876.         CreateProgmanItem "TUN SQL", "MS Access Informix TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  877.     END IF
  878.     IF szDemoOra$ = "YES" THEN
  879.         szCmd$ = szExePath$ + " ORADEMO.MDB"
  880.         CreateProgmanItem "TUN SQL", "MS Access Oracle TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  881.     END IF
  882.     IF szDemoSyb$ = "YES" THEN
  883.         szCmd$ = szExePath$ + " SYBDEMO.MDB"
  884.         CreateProgmanItem "TUN SQL", "MS Access Sybase TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  885.     END IF
  886.     IF szDemoIse$ = "YES" THEN
  887.         szCmd$ = szExePath$ + " ISEDEMO.MDB"
  888.         CreateProgmanItem "TUN SQL", "MS Access Informix-SE TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  889.     END IF
  890.     END IF
  891. ENDIF
  892.  
  893. ''
  894. ''      Run TCP/IP Custom Dialogs
  895. ''
  896. IF RUNTCPCONF$ <> "NO" THEN
  897.  
  898. IF INSTALLKER% <> 0 THEN
  899.   IF TCPCONF$= "YES" THEN
  900.     SETUPPROG$= MakePath( DESTKER$, "WTCPDLG.DLL")
  901.     i% = CustomSetup( WndFrame%, SETUPPROG$)
  902.   ENDIF
  903. ENDIF
  904. ENDIF
  905.  
  906.  
  907. ''-------------------------------------------------------------------------
  908. '' QUIT
  909. ''   Exit the program after displaying the appropriate dialog box according
  910. ''   the error status
  911. ''-------------------------------------------------------------------------
  912. QUIT:
  913.     ON ERROR GOTO ERRQUIT
  914.  
  915.     IF ERR = 0 THEN
  916.         dlg% = EXITSUCCESS
  917.     IF COPYFILES$ <> "NO" THEN
  918.       IF RestartListEmpty() = 0 THEN
  919.         dumb% = ExitExecRestart()
  920.       END IF
  921.     ENDIF
  922.         IF FINDTUNPATH% = 0 THEN
  923. REBOOT1:
  924.           SetSymbolValue "TitleYesNo", "Restart System"
  925.           SetSymbolValue "MessageYesNo", "Setup has modified AUTOEXEC.BAT file. Do you want to restart the computer ?" 
  926.           sz$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "")
  927.           UIPop 1
  928.           IF sz$ <> "NO" THEN
  929.          i%=MyExitWindows(1)
  930.              GOTO REBOOT1
  931.           ENDIF
  932.         ENDIF
  933.     ELSEIF ERR = STFQUIT THEN
  934.         dlg% = EXITQUIT
  935.     ELSE
  936.         dlg% = EXITFAILURE
  937.     END IF
  938. QUITL1:
  939.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  940.     IF sz$ = "REACTIVATE" THEN
  941.         GOTO QUITL1
  942.     END IF
  943.     UnregisterCtl3d
  944.     UIPop 1
  945.  
  946.     END
  947.  
  948. ERRQUIT:
  949.     i% = DoMsgBox("Setup script sources are not correct, please contact your technical support", "Setup Warning", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  950.     END
  951.  
  952.  
  953.  
  954. ''-------------------------------------------------------------------------
  955. '' GETPATH
  956. ''   Ask for TUN SQL Installation directory
  957. ''-------------------------------------------------------------------------
  958. GETPATH:
  959.     SetSymbolValue "EditTextIn", DEST$
  960.     SetSymbolValue "EditFocus", "END"
  961. GETPATHL1:
  962.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  963.  
  964.     IF sz$ = "CONTINUE" THEN
  965.         olddest$ = DEST$
  966.         DEST$ = GetSymbolValue("EditTextOut")
  967.  
  968.         ''Validate new path.
  969.         IF IsDirWritable(DEST$) = 0 THEN
  970.             GOSUB BADPATH
  971.             GOTO GETPATHL1
  972.         END IF
  973.         UIPop 1
  974.  
  975.         ''Truncate display if too long.
  976.         IF LEN(DEST$) > 23 THEN
  977.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  978.         ELSE
  979.             ReplaceListItem DRIVETEXT$, 7, DEST$
  980.         END IF
  981.  
  982.         ''Recalc if path changed.
  983.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  984.             RecalcPath
  985.             SetDriveStatus
  986.         END IF
  987.  
  988.         olddest$ = ""
  989.         GOTO CUSTINST
  990.     ELSEIF sz$ = "REACTIVATE" THEN
  991.         RecalcPath
  992.         SetDriveStatus
  993.         GOTO GETPATHL1
  994.     ELSEIF sz$ = "EXIT" THEN
  995.         GOSUB ASKQUIT
  996.         GOTO GETPATHL1
  997.     ELSE
  998.         UIPop 1
  999.         GOTO CUSTINST
  1000.     END IF
  1001.  
  1002.  
  1003.  
  1004. ''-------------------------------------------------------------------------
  1005. '' ASKUPDATE
  1006. ''   Ask for upgrading the CTL3D.DLL library
  1007. ''-------------------------------------------------------------------------
  1008. ASKUPDATE:
  1009.     sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  1010.     IF sz$ = "YES" THEN
  1011.     CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  1012.     CopyFile szNF$, szOF$, cmoOverwrite, 0 
  1013.     ENDIF
  1014.         
  1015.     UIPop 1
  1016.     RETURN
  1017.  
  1018.  
  1019. ''-------------------------------------------------------------------------
  1020. '' CHECKDMVERSION
  1021. ''   If present, check that the driver manager version is greater than
  1022. ''   1.00. If not, display a dialog box to inform the user.
  1023. ''-------------------------------------------------------------------------
  1024. CHECKDMVERSION:
  1025.     szWinDir$ = GetWindowsDir()
  1026.     szWinSysDir$ = GetWindowsSysDir()
  1027.     fSaveDM% = 0
  1028.     fDM% = CheckDriverManager(szWinDir$, szWinSysDir$)
  1029.     IF fDM% = 0 THEN
  1030.     '' ---- No driver manager is currently installed ----
  1031.     IF opt1$ = "NONE" THEN
  1032.             sz$ = UIStartDlg(CUIDLL$,ODBCNODM,"FInfoDlgProc",APPHELP,HELPPROC$)
  1033.         IF sz$ = "BACK" THEN
  1034.             UIPop 1
  1035.             GOTO CUSTINST
  1036.         ELSEIF sz$ = "CONTINUE" THEN
  1037.             UIPop 2
  1038.             GOTO INSTALL
  1039.         ELSEIF sz$ = "EXIT" THEN
  1040.                 GOSUB ASKQUIT
  1041.                 GOTO CHECKDMVERSION
  1042.         ELSEIF sz$ = "REACTIVATE" THEN
  1043.                 GOTO CHECKDMVERSION
  1044.         ENDIF
  1045.     ELSE
  1046.         '' ---- Hide the Custom install dialog ----
  1047.         UIPop 1
  1048.         GOTO INSTALL
  1049.     ENDIF
  1050.     ELSEIF fDM% = -1 THEN
  1051.     '' ---- Driver manager version is less than 2.00 ----
  1052.     IF opt1$ = "NONE" THEN
  1053.         '' ---- User has not selected DM Installation ----
  1054.         '' ---- So we display a Version Warning Dialog ----
  1055.             sz$ = UIStartDlg(CUIDLL$,ODBCBAD,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1056.         IF sz$ = "BACK" THEN
  1057.             UIPop 1
  1058.             GOTO CUSTINST
  1059.         ELSEIF sz$ = "CONTINUE" THEN
  1060.             UIPop 2
  1061.             GOTO INSTALL
  1062.         ELSEIF sz$ = "EXIT" THEN
  1063.                 GOSUB ASKQUIT
  1064.                 GOTO CHECKDMVERSION
  1065.         ELSEIF sz$ = "REACTIVATE" THEN
  1066.                 GOTO CHECKDMVERSION
  1067.         ENDIF
  1068.     ELSE
  1069.         '' ---- User has selected DM Installation ----
  1070.         '' ---- So we display a Backup Copy Dialog ----
  1071.             sz$ = UIStartDlg(CUIDLL$,ODBCBACK,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1072.         IF sz$ = "BACK" THEN
  1073.             UIPop 1
  1074.             GOTO CUSTINST
  1075.         ELSEIF sz$ = "CONTINUE" THEN
  1076.             UIPop 2
  1077.         fSaveDM% = 1
  1078.             GOTO INSTALL
  1079.         ELSEIF sz$ = "EXIT" THEN
  1080.                 GOSUB ASKQUIT
  1081.                 GOTO CHECKDMVERSION
  1082.         ELSEIF sz$ = "REACTIVATE" THEN
  1083.                 GOTO CHECKDMVERSION
  1084.         ENDIF
  1085.     ENDIF
  1086.     ELSEIF fDM% = 1 THEN
  1087.     '' ---- Driver manager version is 2.00 ----
  1088.     IF opt1$ = "DRIVERMANAGER" THEN
  1089.         '' ---- User has selected DM Installation  ----
  1090.         '' ---- So we display a Backup Copy Dialog ----
  1091.             sz$ = UIStartDlg(CUIDLL$,ODBCBACK,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1092.         IF sz$ = "BACK" THEN
  1093.             UIPop 1
  1094.             GOTO CUSTINST
  1095.         ELSEIF sz$ = "CONTINUE" THEN
  1096.             UIPop 2
  1097.         fSaveDM% = 1
  1098.             GOTO INSTALL
  1099.         ELSEIF sz$ = "EXIT" THEN
  1100.                 GOSUB ASKQUIT
  1101.                 GOTO CHECKDMVERSION
  1102.         ENDIF
  1103.     ELSE
  1104.         '' ---- User has not selected DM Installation -> OK           ----
  1105.         '' ---- We hide the Custom install dialog and proceed install ----
  1106.         UIPop 1
  1107.         GOTO INSTALL
  1108.     ENDIF
  1109.     ELSE
  1110.     GOTO CUSTINST
  1111.     ENDIF
  1112.  
  1113.      
  1114.  
  1115. ''-------------------------------------------------------------------------
  1116. '' TOOBIG
  1117. ''   Inform the user he does not have enough disk space
  1118. ''-------------------------------------------------------------------------
  1119. TOOBIG:
  1120.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  1121.     IF sz$ = "REACTIVATE" THEN
  1122.         RecalcPath
  1123.         SetDriveStatus
  1124.         GOTO TOOBIG
  1125.     END IF
  1126.     UIPop 1
  1127.     RETURN
  1128.  
  1129.  
  1130.  
  1131. ''-------------------------------------------------------------------------
  1132. '' BADPATH
  1133. ''   Inform the user that the path he entered is not valid
  1134. ''-------------------------------------------------------------------------
  1135. BADPATH:
  1136.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  1137.     IF sz$ = "REACTIVATE" THEN
  1138.         RecalcPath
  1139.         SetDriveStatus
  1140.         GOTO BADPATH
  1141.     END IF
  1142.     UIPop 1
  1143.     RETURN
  1144.  
  1145.  
  1146. ''-------------------------------------------------------------------------
  1147. '' ASKQUIT
  1148. ''   Ask the user if he really want to quit TUN SQL setup or continue
  1149. ''   the installation
  1150. ''-------------------------------------------------------------------------
  1151. ASKQUIT:
  1152.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1153.  
  1154.     IF sz$ = "EXIT" THEN
  1155.         UIPopAll
  1156.         ERROR STFQUIT
  1157.     ELSEIF sz$ = "REACTIVATE" THEN
  1158.         GOTO ASKQUIT
  1159.     ELSE
  1160.         UIPop 1
  1161.     END IF
  1162.     RETURN
  1163.  
  1164.  
  1165. '*************************************************************************
  1166. '**
  1167. '** Purpose:
  1168. '**     Adds the specified option files to the copy list.
  1169. '** Arguments:
  1170. '**     ftype%  - type of files to add, one of the following:
  1171. '**             APPFILES, OPTFILES1, OPTFILES2
  1172. '** Returns:
  1173. '**     none.
  1174. '*************************************************************************
  1175. SUB AddOptFilesToCopyList (ftype%) STATIC
  1176.  
  1177.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1178.     IF ftype% = APPFILES THEN
  1179.     AddSectionFilesToCopyList "SqlFiles", SrcDir$, DEST$
  1180.     ELSEIF ftype% = OPTFILES1 AND GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
  1181.     AddSectionFilesToCopyList "OdbcFiles", SrcDir$, DEST$
  1182.     ELSEIF ftype% = OPTFILES2 AND GetListItem(CHECKSTATES$, OPTFILES2) = "ON" THEN
  1183.     AddSectionFilesToCopyList "SamplesFiles", SrcDir$, DEST$
  1184.     ELSEIF ftype% = OPTFILES3 AND GetListItem(CHECKSTATES$, OPTFILES3) = "ON" THEN
  1185.     AddSectionFilesToCopyList "KernelFiles", SrcDir$, DEST$
  1186.     ELSEIF ftype% = OPTFILES4 THEN
  1187.     AddSectionFilesToCopyList "KernelnFiles", SrcDir$, DEST$
  1188.     ELSEIF ftype% = CRYPTFILES  THEN
  1189.     AddSectionFilesToCopyList "CryptFiles", SrcDir$, DEST$
  1190.     ELSEIF ftype% = CTL3DFILES  THEN
  1191.     AddSectionFilesToCopyList "Ctl3dFiles", SrcDir$, DEST$
  1192.     ELSEIF ftype% = CONVERTFILES  THEN
  1193.     AddSectionFilesToCopyList "ConvertFiles", SrcDir$, DEST$
  1194.     ENDIF
  1195.     SrcDir$ = ""
  1196.  
  1197. END SUB
  1198.  
  1199.  
  1200. '*************************************************************************
  1201. '**
  1202. '** Purpose:
  1203. '**     Recalculates disk space for the given option files and sets
  1204. '**     the status info symbol "StatusItemsText".
  1205. '** Arguments:
  1206. '**     ftype% - type of files to add, one of the following:
  1207. '**             APPFILES, OPTFILES1, OPTFILES2
  1208. '** Returns:
  1209. '**     none.
  1210. '*************************************************************************
  1211. SUB RecalcOptFiles (ftype%) STATIC
  1212.     CursorSave% = ShowWaitCursor()
  1213.     ClearCopyList
  1214.     AddOptFilesToCopyList ftype%
  1215.  
  1216.     fExtra% = 0
  1217.     IF ftype% = APPFILES THEN
  1218.         ListSym$ = APPNEEDS$
  1219.         ''Add extra cost to Windows drive for ini/progman, etc.
  1220.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1221.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  1222.         fExtra% = 1
  1223.     ELSEIF ftype% = OPTFILES1 THEN
  1224.         ListSym$ = OPT1NEEDS$
  1225.     ELSEIF ftype% = OPTFILES2 THEN
  1226.         ListSym$ = OPT2NEEDS$
  1227.     ELSEIF ftype% = OPTFILES3 THEN
  1228.         ListSym$ = OPT3NEEDS$
  1229.     ELSEIF ftype% = OPTFILES4 THEN
  1230.         ListSym$ = OPT4NEEDS$
  1231.     END IF
  1232.  
  1233.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  1234.  
  1235.     cost& = 0
  1236.     FOR i% = 1 TO 26 STEP 1
  1237.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  1238.     NEXT i%
  1239.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  1240.  
  1241.     IF StillNeed& > 0 THEN
  1242.         ReplaceListItem BIGLIST$, ftype%, "YES"
  1243.     ELSE
  1244.         ReplaceListItem BIGLIST$, ftype%, ""
  1245.     END IF
  1246.  
  1247.     IF fExtra% THEN
  1248.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  1249.     END IF
  1250.     RestoreCursor CursorSave%
  1251.     ListSym$ = ""
  1252. END SUB
  1253.  
  1254.  
  1255. '*************************************************************************
  1256. '**
  1257. '** Purpose:
  1258. '**     Recalculates disk space and sets option status info according
  1259. '**     to the current destination path.
  1260. '** Arguments:
  1261. '**     none.
  1262. '** Returns:
  1263. '**     none.
  1264. '*************************************************************************
  1265. SUB RecalcPath STATIC
  1266.  
  1267.     CursorSave% = ShowWaitCursor()
  1268.  
  1269.     DESTKER$= MakePath( DEST$, "KERNELW")
  1270.     FILEPATH$= MakePath( DESTKER$, "TUNTCPIP.DLL")
  1271.     IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  1272.       MasterFileVersion$ = GetSectionKeyVersion("KernelFiles","TUNTCPIP.DLL")
  1273.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  1274.       INSTALLEDKER% = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  1275.     ENDIF
  1276.     RecalcOptFiles APPFILES
  1277.     RecalcOptFiles OPTFILES1
  1278.     RecalcOptFiles OPTFILES2
  1279.     IF INSTALLEDKER% <> 1 THEN
  1280.       ReplaceListItem CHECKSTATES$, OPTFILES3, "ON"
  1281.     ELSE
  1282.       ReplaceListItem CHECKSTATES$, OPTFILES3, "OFF"
  1283.     ENDIF
  1284.     RecalcOptFiles OPTFILES3
  1285.     IF INSTALLEDKER% <> 1 THEN
  1286.       RecalcOptFiles OPTFILES4
  1287.     ENDIF
  1288.  
  1289.     RestoreCursor CursorSave%
  1290. END SUB
  1291.  
  1292.  
  1293. '*************************************************************************
  1294. '**
  1295. '** Purpose:
  1296. '**     Sets drive status info according to latest disk space calcs.
  1297. '** Arguments:
  1298. '**     none.
  1299. '** Returns:
  1300. '**     none.
  1301. '*************************************************************************
  1302. SUB SetDriveStatus STATIC
  1303.  
  1304.     drive$ = MID$(DEST$, 1, 1)
  1305.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  1306.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%))
  1307.     free& = GetFreeSpaceForDrive(drive$)
  1308.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  1309.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  1310.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  1311.  
  1312.     IF drive$ = WINDRIVE$ THEN
  1313.         ReplaceListItem DRIVETEXT$, 4, ""
  1314.         ReplaceListItem DRIVETEXT$, 5, ""
  1315.         ReplaceListItem DRIVETEXT$, 6, ""
  1316.     ELSE
  1317.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1318.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%))
  1319.         IF cost& = 0 THEN
  1320.             ReplaceListItem DRIVETEXT$, 4, ""
  1321.             ReplaceListItem DRIVETEXT$, 5, ""
  1322.             ReplaceListItem DRIVETEXT$, 6, ""
  1323.         ELSE
  1324.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  1325.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  1326.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  1327.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  1328.         END IF
  1329.     END IF
  1330. END SUB
  1331.  
  1332.  
  1333. '*************************************************************************
  1334. '**
  1335. '** Purpose:
  1336. '**     Appends a file name to the end of a directory path,
  1337. '**     inserting a backslash character as needed.
  1338. '** Arguments:
  1339. '**     szDir$  - full directory path (with optional ending "\")
  1340. '**     szFile$ - filename to append to directory
  1341. '** Returns:
  1342. '**     Resulting fully qualified path name.
  1343. '*************************************************************************
  1344. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1345.     IF szDir$ = "" THEN
  1346.         MakePath = szFile$
  1347.     ELSEIF szFile$ = "" THEN
  1348.         MakePath = szDir$
  1349.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1350.         MakePath = szDir$ + szFile$
  1351.     ELSE
  1352.         MakePath = szDir$ + "\" + szFile$
  1353.     END IF
  1354. END FUNCTION
  1355.  
  1356.  
  1357. '*************************************************************************
  1358. '**
  1359. '** Purpose:
  1360. '**     Return the string form of an integer.
  1361. '** Arguments:
  1362. '**     i%  - The integer to transform.
  1363. '** Returns:
  1364. '**     The string form of the integer.
  1365. '*************************************************************************
  1366. FUNCTION MakeString (i%) STATIC AS STRING
  1367.  
  1368.     Number$ = "0123456789"
  1369.     MakeString = "0" + MID$(Number$,i%+1 ,1)
  1370.     
  1371. END FUNCTION
  1372.  
  1373. '*************************************************************************
  1374. '**
  1375. '** Purpose:
  1376. '**     Return the string form of a drive number (1 is drive A, ...)
  1377. '** Arguments:
  1378. '**     i%  - The drive number starting at 1
  1379. '** Returns:
  1380. '**     The string form of the drive.
  1381. '*************************************************************************
  1382.  
  1383. FUNCTION MakeDrive (i%) STATIC AS STRING
  1384.  
  1385.     Letters$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  1386.     MakeDrive = MID$(Letters$,i%,1)
  1387.     
  1388. END FUNCTION
  1389.  
  1390.  
  1391. '*************************************************************************
  1392. '**
  1393. '** Purpose:
  1394. '**     Giving an application name try to locate the complete path of the
  1395. '**    application executable
  1396. '** Arguments:
  1397. '**     szAppName$ - The application name to locate. One of the following:
  1398. '**            "WORD"
  1399. '**            "EXCEL"
  1400. '**            "ACCESS"
  1401. '** Returns:
  1402. '**     The complete path of the application executable
  1403. '*************************************************************************
  1404.  
  1405. FUNCTION LookupApp (szAppName$) STATIC AS STRING
  1406.  
  1407.     LookupApp = "APPLI.EXE"
  1408.     FOR i% = 3 TO 26 STEP 1
  1409.     szDrive$ = MakeDrive(i%)
  1410.     IF IsDriveValid(szDrive$) = 1 THEN
  1411.         IF IsDriveRemovable(szDrive$) = 0 THEN
  1412.         IF szAppName$ = "WORD" THEN
  1413.             szExeName$ = "WINWORD.EXE"
  1414.             szPath$ = szDrive$ + ":\MSOFFICE\WINWORD\" + szExeName$
  1415.             IF DoesFileExist(szPath$, femRead) THEN
  1416.                 LookupApp = szPath$
  1417.                 GOTO RETURN_LOOKUPAPP
  1418.             ELSE
  1419.                 szPath$ = szDrive$ + ":\WINWORD\" + szExeName$
  1420.                 IF DoesFileExist(szPath$, femRead) THEN
  1421.                     LookupApp = szPath$
  1422.                     GOTO RETURN_LOOKUPAPP
  1423.                 ELSE
  1424.                 LookupApp = szExeName$
  1425.                 ENDIF
  1426.             ENDIF
  1427.         ELSEIF szAppName$ = "EXCEL" THEN
  1428.             szExeName$ = "EXCEL.EXE"
  1429.             szPath$ = szDrive$ + ":\MSOFFICE\EXCEL\" + szExeName$
  1430.             IF DoesFileExist(szPath$, femRead) THEN
  1431.                 LookupApp = szPath$
  1432.                 GOTO RETURN_LOOKUPAPP
  1433.             ELSE
  1434.                 szPath$ = szDrive$ + ":\EXCEL\" + szExeName$
  1435.                 IF DoesFileExist(szPath$, femRead) THEN
  1436.                     LookupApp = szPath$
  1437.                     GOTO RETURN_LOOKUPAPP
  1438.                 ELSE
  1439.                 LookupApp = szExeName$
  1440.                 ENDIF
  1441.             ENDIF
  1442.         ELSEIF szAppName$ = "ACCESS" THEN
  1443.             szExeName$ = "MSACCESS.EXE"
  1444.             szPath$ = szDrive$ + ":\MSOFFICE\ACCESS\" + szExeName$
  1445.             IF DoesFileExist(szPath$, femRead) THEN
  1446.                 LookupApp = szPath$
  1447.                 GOTO RETURN_LOOKUPAPP
  1448.             ELSE
  1449.                 szPath$ = szDrive$ + ":\ACCESS\" + szExeName$
  1450.                 IF DoesFileExist(szPath$, femRead) THEN
  1451.                     LookupApp = szPath$
  1452.                     GOTO RETURN_LOOKUPAPP
  1453.                 ELSE
  1454.                 LookupApp = szExeName$
  1455.                 ENDIF
  1456.             ENDIF
  1457.         ENDIF
  1458.         ENDIF
  1459.     ENDIF
  1460.     NEXT i%
  1461.  
  1462. RETURN_LOOKUPAPP:
  1463.  
  1464. END FUNCTION
  1465.  
  1466. '**
  1467. '** Purpose:
  1468. '**     Newest version 
  1469. '** Arguments:
  1470. '**     szVersion1$ - N.N.N.N version string 1 
  1471. '**     szVersion2$ - N.N.N.N version string 2 
  1472. '** Returns:
  1473. '**     If szVersion1$ > szVersion2$  return 0 
  1474. '**     If szVersion1$ = szVersion2$  return 1 
  1475. '**     If szVersion1$ < szVersion2$  return 2 
  1476. '*************************************************************************
  1477. FUNCTION IsNewer (szVersion1$, szVersion2$) STATIC AS INTEGER
  1478.  
  1479.     IF GetVersionNthField(szVersion1$,1) < GetVersionNthField(szVersion2$,1) THEN
  1480.     IsNewer = 2
  1481.     ELSEIF GetVersionNthField(szVersion1$,1) > GetVersionNthField(szVersion2$,1) THEN
  1482.     IsNewer = 0
  1483.     ELSE 
  1484.     IF GetVersionNthField(szVersion1$,2) < GetVersionNthField(szVersion2$,2) THEN
  1485.       IsNewer = 2
  1486.     ELSEIF GetVersionNthField(szVersion1$,2) > GetVersionNthField(szVersion2$,2) THEN
  1487.     IsNewer = 0
  1488.     ELSE
  1489.       IF GetVersionNthField(szVersion1$,3) < GetVersionNthField(szVersion2$,3) THEN
  1490.         IsNewer = 2
  1491.       ELSEIF GetVersionNthField(szVersion1$,3) > GetVersionNthField(szVersion2$,3) THEN
  1492.         IsNewer = 0
  1493.       ELSE
  1494.         IF GetVersionNthField(szVersion1$,4) < GetVersionNthField(szVersion2$,4) THEN
  1495.           IsNewer = 2
  1496.         ELSEIF GetVersionNthField(szVersion1$,4) > GetVersionNthField(szVersion2$,4) THEN
  1497.           IsNewer = 0
  1498.         ELSE
  1499.           IsNewer = 1
  1500.         END IF
  1501.       END IF
  1502.     END IF
  1503.     END IF
  1504.  
  1505. END FUNCTION
  1506.  
  1507. FUNCTION IsInstalled(szSection$,szKey$,szFile$,szPath$) STATIC AS INTEGER 
  1508.  
  1509.     IsInstalled = 4
  1510.     FILEPATH$= MakePath( szPath$, szFile$)
  1511.     IF DoesFileExist ( FILEPATH$, femExists) = 1 THEN
  1512.       MasterFileVersion$ = GetSectionKeyVersion(szSection$,szKey$)
  1513.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  1514.       IsInstalled = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  1515.     ENDIF
  1516.  
  1517. END FUNCTION
  1518.